import request from '../utils/request';
import key from 'keymaster'; //按键监听
import { requestReset } from '../services/api';

// 简单理解，model，代表“数据库服务器”，用来管理“数据库实例”。namespace，代表“当前数据库实例的名称”。state，用于初始化“当前数据库实例的数据结构”。reducers，定义了“可用来改变当前数据库实例的数据结构及数据的接口”
export default {
  namespace: 'complex', //“complex”，是“命名空间的关键字”，是“当前model的名称”，更是“当前数据库实例的名称”
  state: {num: 100}, //初始化“当前数据库实例的数据结构”，可以是基础数据类型（整型，字符串等），也可以是数组、对象。附：关于state，详情见react。附：这里只是用来进行数据初始化的，真正数据结构动态可变，可扩充
  subscriptions: { //事件监听。从“源”获取数据
    setup({ dispatch, history }) {
      console.log("setup");
    },
    keyEvent({dispatch}) {
      key('⌘+up, ctrl+up', () => {
        console.log("keyEvent");
      });
    },
  },
  effects: { //异步数据流处理，而后将结果转交给reducers进行处理（redux-saga）
    *random_request(action, { call, put }) {
      const response = yield call(request, 'http://localhost/react/random'); //暂停，以阻塞方式调用函数，直到取到数据。（暂定执行，发送异步请求，直到获得结果后，恢复执行）
      yield put({type: "random", payload: response}); //向reducers发送消息（通过消息机制，将“处理结果”发送至“reducers”）
    },
    *reset_request(action, { call, put }) {
      const response = yield call(requestReset, {num: 100}); //调用service
      yield put({type: "reset", payload: response}); //向reducers发送消息
    },
  },
  reducers: { //同步数据流处理，定义了“可用来改变当前数据库实例的数据结构及数据的接口”（redux）
    add  (state) {
      console.log("+");
      console.log(state);
      return {...state, num: state.num+1}; // 更新当前数据库实例中的数据
    },
    minus(state) {
      console.log("-");
      console.log(state);
      return {...state, num: state.num-1};
    },
    random(state, action) {
      console.log("random");
      console.log(state);
      console.log(action);
      return {...state, num: action.payload.data};
    },
    reset(state, action) {
      console.log("reset");
      console.log(state);
      console.log(action);
      return {...state, num: action.payload.data};
    },
  },
};
